﻿// Protecting the Flowers POJ - 3262.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>


using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-3262

/*
农夫约翰去砍柴，留下 N 头（2≤N≤100,000）牛像往常一样吃草。当他回来时，惊恐地发现牛群正在他的花园里啃食他的美丽花朵。
为了尽量减少后续损失，FJ 决定立即采取行动，把每头牛都运回自己的牛舍。

每头牛 i 所处的位置距离自己的牛舍有 Ti 分钟（1 ≤ Ti ≤ 2,000,000）的路程。
此外，在等待运输的过程中，它每分钟会毁掉 Di（1 ≤ Di ≤ 100）朵花。无论 FJ 如何努力，它每次只能把一头奶牛运回自己的牛舍。
将奶牛 i 运回牛舍需要 2 × Ti 分钟（Ti 去，Ti 回）。
FJ 从花丛开始，把奶牛运到牛舍，然后走回花丛，不需要额外的时间去运送下一头需要运送的奶牛。

请编写一个程序，确定 FJ 接走奶牛的顺序，使毁坏的花朵总数最小。

输入
第1行：一个整数N
第2行到第N+1行：每行包含两个用空格分隔的整数Ti和Di，描述一头奶牛的特点
输出
第1行：一个整数，表示被破坏的花朵的最小数量

6
3 1
2 5
2 3
3 2
4 1
1 6

86

约翰按以下顺序将奶牛送回谷仓：6、2、3、4、1、5。当他将奶牛6运送到谷仓时，其他奶牛会破坏24朵花；
接下来他将带走奶牛2，再失去28朵他美丽的花卉。对于奶牛3、4、1，他分别损失了16、12和6朵花。
当他选择奶牛5时，没有更多的奶牛破坏花朵，所以该奶牛的损失为零。
这种方式造成的总花朵损失是24 + 28 + 16 + 12 + 6 = 86。
*/

const int N = 100010;
struct COW {
    int t, d;
}cows[N];
int n;


bool cmp(const struct COW& a, const struct COW& b) {
    return a.t * 2 * b.d <= b.t * 2 * a.d;
}


int main()
{
    cin >> n;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        cin >> cows[i].t >> cows[i].d;
        sum += cows[i].d;
    }
    sort(cows, cows + n, cmp);
    long long ans = 0;
    for (int i = 0; i < n; i++) {
        sum -= cows[i].d;
        ans += sum * cows[i].t * 2;
    }
    cout << ans << endl;

    return 0;
}

